package com.bombitarodriguez.dominio.armas;

import com.bombitarodriguez.dominio.Casillero;
import com.bombitarodriguez.dominio.Juego;
import com.bombitarodriguez.dominio.Mapa;
import com.bombitarodriguez.dominio.Posicion;
import com.bombitarodriguez.dominio.obstaculosYArticulos.Articulo;
import com.bombitarodriguez.dominio.obstaculosYArticulos.Obstaculo;
import com.bombitarodriguez.dominio.personaje.Bombita;
import com.bombitarodriguez.dominio.personaje.Enemigo;
import com.bombitarodriguez.interfaces.ObjetoReaccionable;

import fiuba.algo3.titiritero.dibujables.Imagen;
import fiuba.algo3.titiritero.modelo.ObjetoPosicionable;

/**
 * 
 * @author Mauro
 *
 */
public abstract class Arma implements ObjetoReaccionable , ObjetoPosicionable{
	
	protected Casillero casilleroContenedor;
	
	protected Integer destruccion;
	
	protected Integer retardo;
	
	protected Integer ondaExpansiva;
	
	protected Imagen miVista;
	
	@Override
	public int getX() {
		Integer enteroAux = 
				casilleroContenedor.getPosicion().getPosX() - 1;
		enteroAux = enteroAux * Juego.TAMANIO_IMAGEN ;;
		return (enteroAux);
	}

	@Override
	public int getY() {
		Integer enteroAux = casilleroContenedor.getPosicion().getPosY();
		enteroAux = Juego.ANCHO_MAPA - enteroAux;
		enteroAux = (enteroAux * Juego.TAMANIO_IMAGEN );
		return (enteroAux);
	}

	protected FactoryExplosion fabricaDeExplosiones;

	public Integer getDestruccion() {
		return destruccion;
	}

	public void setDestruccion(Integer destruccion) {
		this.destruccion = destruccion;
	}

	public Integer getRetardo() {
		return retardo;
	}

	public void setRetardo(Integer retardo) {
		this.retardo = retardo;
	}

	public Integer getOndaExpansiva() {
		return ondaExpansiva;
	}

	public void setOndaExpansiva(Integer ondaExpansiva) {
		this.ondaExpansiva = ondaExpansiva;
	}
	
	public Casillero getCasillero() {
		return casilleroContenedor;
	}
	
	@Override
	public void setCasillero(Casillero casillero) {
		casilleroContenedor = casillero;
	}

	@Override
	public Posicion getPosicion() {
		return casilleroContenedor.getPosicion();
	}

	public Boolean reaccionarCon(Bombita bombita){
		return false;
	}
	@Override
	public Boolean reaccionarCon(Enemigo enemigo){
		return false;
	}
	
	@Override
	public Boolean reaccionarCon(Proyectil proyectil){
		this.explotar();
		proyectil.explotar();
		return false;
	}
	@Override
	public Boolean reaccionarCon(Obstaculo obstaculo){
		return false;
	}
	@Override
	public Boolean reaccionarCon(Articulo artitulo){
		return false;
	}	
	public void explotar(){
		Explosion explosion = fabricaDeExplosiones.crearExplosion( destruccion , ondaExpansiva );
		Casillero casilleroAuxiliar = 
				Mapa.getMapa().getCasillero(this.getPosicion());
		casilleroContenedor.quitarObjeto(this);
		Mapa.quitarDibujable(this);
		casilleroAuxiliar.agregarObjeto( explosion );
		explosion.ignicion();
				
	}
	
	public Boolean reaccionarCon(Explosion explosion){
		this.explotar();
		return false;
	}
	
	public Imagen getVista(){
		return this.miVista;
	}
}
